![]() |
![]() |
|
Anweisungsblöcke lassen sich auch beliebig ineinander verschachteln. Dabei beschreibt jeder Anweisungsblock eine ihm eigene Ebene, z.B.:
Beachten Sie, wie Einzüge hier dazu benutzt werden, optisch die Zugehörigkeit einer oder mehrerer Anweisungen zu einem bestimmten Block aufzuzeigen. Die Anweisungen 2 und 3 sind zu einem Block zusammengefasst, der sich innerhalb eines äußeren befindet. Zum äußeren Anweisungsblock gehören Anweisung 1 und Anweisung 4 sowie natürlich auch der komplette innere Anweisungsblock. Über die Blockbildung von Anweisungen hinaus werden die geschweiften Klammern dazu benutzt, Definitionsbereiche zu bilden. Beispielsweise lassen sich mehrere Klassendefinitionen einem bestimmten Namespace zuordnen. Dieses Thema an dieser Stelle zu erörtern, ist allerdings noch zu früh. 3.2.3 Kommentare
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| // dies ist ein Kommentar |
Ein »//«-Kommentar gilt für den Rest der gesamten Codezeile, kann jedes beliebige Zeichen enthalten und darf auch nach einer abgeschlossenen Anweisung stehen.
| Console.WriteLine("..."); //Konsolenausgabe |
Sollen viele zusammenhängende Zeilen zu einem längeren Kommentar zusammengefasst werden, bietet sich die zweite Alternative an, bei der ein Kommentar mit »/*« ein- und mit »*/« ausgeleitet wird. Alle sich dazwischen befindlichen Zeichen sind Bestandteil des Kommentars.
| /* Console.WriteLine("..."); |
| Console.ReadLine();*/ |
Tatsächlich kann man sogar mitten in einer Anweisung diesen Kommentar schreiben, ohne dass der C#-Compiler das als Fehler ansieht:
| Console.WriteLine /* Kommentar */("..."); |
| Hinweis Eine weitere Variante eines Kommentars in C# beschreibt drei aufeinander folgende Schrägstriche »///«. Codezeilen, die so ausdokumentiert sind, werden zwar ebenfalls vom C#-Compiler ignoriert, ihnen kommt aber eine weiterreichende Bedeutung zu: Sie dienen dem Erstellen einer XML-basierten Dokumentation. |
Die Entwicklungsumgebung des Visual Studio 2005 bietet eine recht interessante und einfache Alternative, insbesondere größere Blöcke auf einmal auszukommentieren. Sie müssen dazu nur sicherstellen, dass in der Entwicklungsumgebung die Symbolleiste Text-Editor angezeigt wird. Dazu brauchen Sie nur mit der rechten Maustaste das Kontextmenü einer der aktuellen Symbolleisten zu öffnen. Im Kontextmenü finden Sie alle Symbolleisten der Entwicklungsumgebung aufgelistet. Da die Anzahl nicht als gering bezeichnet werden kann, lassen sich die einzelnen nach Bedarf ein- oder ausblenden.
Die Symbolleiste Text-Editor enthält zwei Schaltflächen, um markierte Codeblöcke auszukommentieren oder eine Kommentierung wieder aufzuheben (siehe auch Abbildung 3.3).

Hier klicken, um das Bild zu vergrößern
Abbildung 3.3 Kommentare mit Hilfe der Symbolleiste
| In diesem Buch werden alle Kommentare grau hinterlegt, um auf einen Blick deutlich zwischen Code und Kommentar unterscheiden zu können. Außerdem bezieht sich jeder Kommentar auf die folgende Codezeile. |
In der Entwicklungsumgebung erscheinen Kommentare in einer anderen Schriftfarbe als der Programmcode selbst. Sie können die Farbgebung ganz individuell festlegen, wenn Sie das in Abbildung 3.2 gezeigte Dialogfenster öffnen und im Knoten Umgebung der linken Liste Schriftarten und Farben auswählen. Rechts neben dem Listenfeld bieten sich anschließend mehrere Optionen, die Darstellung des Programmcodes im Codefenster zu beeinflussen.
C# gehört zu der Gruppe von Programmiersprachen, die zwischen Groß- und Kleinschreibung unterscheiden. Codieren Sie die Anweisung zur Konsolenausgabe mit
| Console.Writeline("..."); |
werden Sie mit einer Fehlermeldung bei der Kompilierung konfrontiert. Korrekt müsste es lauten:
| Console.WriteLine("..."); |
Es ist Ansichtssache, diese klein karierte Interpretation von C# positiv oder negativ zu beurteilen, denn beispielsweise macht VB.NET hier keinen Unterschied. Positiv ist jedenfalls zu bemerken, dass zwei gleich lautende Bezeichner, die sich nur durch Groß- und Kleinschreibung unterscheiden, in C# auch für zwei unterschiedliche Programmelemente stehen, in VB.NET hingegen nicht. Manchmal erleichtert C# die Festlegung eines Bezeichners für eine Variable und kann außerdem der eindeutigen Zuordnung zweier miteinander in einer logischen Beziehung stehenden Variablen dienen.
Sehen wir uns noch einmal den Code an, den uns die Entwicklungsumgebung nach dem Öffnen eines neuen Projekts vom Typ Konsolenanwendung anbietet:
| using System; |
| using System.Collections.Generic; |
| using System.Text; |
| namespace ConsoleApplication1 |
| { |
| class Program |
| { |
| static void Main(string[] args) |
| { |
| } |
| } |
| } |
Wir erkennen nun eindeutig mehrere ineinander geschachtelte Blockstrukturen. Der äußere Block definiert einen Namespace mit dem Namen ConsoleApplication1. Namespaces dienen dazu, die Typen der .NET-Klassenbibliothek funktionell orientiert zu organisieren und innerhalb eines Namespace namentliche Eindeutigkeit zu gewährleisten.
a| Achtung Der Bezeichner eines Namespace, in unserem Beispiel ConsoleApplication1, wird beim Start eines neuen Projekts automatisch vergeben und entspricht dem Projektnamen. Sie können diese Vorgabe ändern, solange der frei gewählte Name seinerseits innerhalb seines Definitionsbereichs eindeutig ist. |
Im Namespace eingebettet ist eine Klassendefinition, die einen eigenen Anweisungsblock beschreibt:
| namespace ConsoleApplication1 |
| { |
| class Program |
| { |
| } |
| } |
C# ist eine 100 %ig objektorientierte Sprache. Das bedeutet, dass grundsätzlich immer eine Klassendefinition vorliegen muss, um mit einem Objekt arbeiten zu können. Eine Klasse beschreibt einen Typ, in unserem Fall heißt dieser Typ Program. Der Bezeichner Program ist nur als Vorschlag der Entwicklungsumgebung anzusehen und darf im Rahmen der Eindeutigkeit innerhalb des aktuellen Namespace (hier also ConsoleApplication1) nahezu frei vergeben werden. Über die Einschränkungen werden wir uns später noch Gedanken machen müssen.
Wie Sie sehen, kommen wir schon an dieser Stelle zum ersten Mal in Kontakt mit Klassen, die uns bei allen auf dem .NET Framework basierenden Anwendungen begleiten. Was eine Klasse selbst darstellt und wie man sie einsetzt, wird einen wesentlichen Teil dieses Buches ausmachen. Wir wollen es hier aber zunächst bei dieser kurzen Erwähnung belassen, denn in diesem Kapitel werden Sie die grundlegende Syntax von C# lernen, ohne die Gesichtspunkte des objektorientierten Paradigmas berücksichtigen zu müssen.
Interessanter ist für uns momentan die dritte Blockebene, die innerhalb der Klasse Program vordefiniert ist, nämlich die durch Main beschriebene:
| static void Main(string[] args) |
| { |
| } |
Bei Main handelt es sich um eine Prozedur, die für uns von herausragender Bedeutung ist: Wenn wir die Laufzeit einer Anwendung starten, werden zuerst Main und die darin enthaltenen Anweisungen ausgeführt. Sie dürfen den Namen dieser Prozedur auch nicht ändern und müssen natürlich auch die Großschreibweise berücksichtigen, denn beim Start der Laufzeit wird immer nach Main gesucht und nicht nach main oder nach start.
Weiter oben wurde gesagt, dass Anweisungen immer innerhalb eines Blocks aus geschweiften Klammern codiert werden. Wir können diese Aussage nun präzisieren: Anweisungen werden grundsätzlich immer innerhalb des Anweisungsblocks einer Prozedur implementiert. Wir haben das schon bei unserem ersten Beispiel gesehen:
| static void Main(string[] args) |
| { |
| Console.WriteLine("C# ist spitze."); |
| Console.ReadLine(); |
| } |
An dieser Stelle wollen wir uns schon mit einem weiteren Begriff anfreunden, der Ihnen in diesem Kapitel immer wieder über den Weg laufen wird, dessen Bedeutung allerdings erst in Kapitel 4 exakt beschrieben wird: Es handelt sich hierbei um den Begriff der Methode. In herkömmlichen Programmiersprachen, die nicht auf Klassen und Objekten basieren, wird eine Prozedur als eine zusammengehörige Anweisungsfolge beschrieben, die zur Laufzeit der Reihe nach abgearbeitet wird – nicht anders verhält sich Main. Tatsächlich ist die Verwandtschaft zwischen einer Prozedur und einer Methode auch nicht von der Hand zu weisen. Weil Main jedoch innerhalb einer Klasse definiert ist, in unserem Fall in Program, dürfen wir anstatt von der Main-Prozedur auch von der Main-Methode sprechen.
Sehen wir uns nun noch kurz die Definition der Main-Methode an. Die beiden dem Bezeichner vorausgehenden Schlüsselwörter static und void sind zwingend notwendig. Sollten Sie bereits mit C++ oder Java Anwendungen entwickelt haben, werden Sie die Bedeutung dieser beiden Modifizierer kennen: Mit static werden Methoden bezeichnet, die beim Aufruf kein konkretes Objekt voraussetzen, void beschreibt eine Methode ohne Rückgabewert. Im Moment soll diese Information genügen, denn eine genauere Kenntnis hätte derzeit keine Auswirkungen auf die ersten Schritte in die Welt der C#-Programme.
Ein Konsolenprogramm wird gestartet, indem man den Namen der Anwendungsdatei mit der Dateierweiterung .EXE an der Konsole eingibt (die anderen sich bietenden Möglichkeiten über den Explorer bzw. über Start · Ausführen seien hier nur am Rande erwähnt). Manchmal ist es notwendig, dem Programm beim Start Anfangswerte mitzuteilen, die vom laufenden Programm zur Ausführung und Weiterverarbeitung benötigt werden. Angenommen, Sie wollen einer Konsolenanwendung mit dem Dateinamen MyApplication.exe die drei Zahlen 10, 14 und 17 übergeben, sähe der Aufruf an der Eingabeaufforderung wie folgt aus:
MyApplication.exe 10 14 17
Diese drei Zahlen werden von der Parameterliste, die hinter dem Bezeichner Main in runden Klammern angegeben ist, in Empfang genommen:
| Main(string[] args) ... |
Wie die übergebenen Daten mittels Programmcode verarbeitet werden, folgt später. Die Angabe der Parameterliste ist optional. Benötigt ein Programm bei seinem Aufruf keine Daten, kann die Parameterliste leer bleiben, die Angabe der runden Klammern ist aber unbedingt erforderlich:
| static void Main() ... |
| << zurück |
|
||||||||||||||
|
||||||||||||||
|
||||||||||||||
|
||||||||||||||
Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.